package com.digdes.calendar.gwt.client.widget;

import com.digdes.calendar.gwt.client.dto.EventDTOImpl;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;

import java.util.Date;
import java.util.Set;

/**
 * User: Dmitry
 * Date: 17.05.12
 * Time: 14:19
 */
public class MainScheduler extends FlexTable {
    private AbsolutePanel panel;

    public void RefreshTimeBorders(int startorfinish, int index, int vsize, int blockcell, int countday) {
        if (startorfinish != 0) {
            index--;
            int t = blockcell * (countday - 1);
            for (int i = 0; i < vsize; i++)
                for (int j = 0; j < blockcell; j++) {
                    if (j == index)
                        this.getCellFormatter().addStyleName(i, t + j, "cellGreenRight");
                    else
                        this.getCellFormatter().removeStyleName(i, t + j, "cellGreenRight");
                }
        } else {
            for (int i = 0; i < vsize; i++)
                for (int j = 0; j < blockcell; j++) {
                    if (j == index)
                        this.getCellFormatter().addStyleName(i, j, "cellGreenLeft");

                    else
                        this.getCellFormatter().removeStyleName(i, j, "cellGreenLeft");
                }
        }

    }

    public void drawLineScheduler(Set<EventDTOImpl> result, int line, Date dateStart, Date dateFinish) {
        for (EventDTOImpl event : result) {
            Date dst = event.getDateStart();
            Date dfi = event.getDateFinish();
            // выщитывается начальная ячейка, если начало события не влезается на отображаемую часть календаря
            // то событие отображается с начала календаря.
            Long start = (dst.getTime() - dst.getHours() * 3600000 - dateStart.getTime()) / 86400000 * 9 + dst.getHours() - 9;
            if (start < 0) start = 0l;
            // выщитывается конечная ячейка, если конец события не влезается на отображаемую часть календаря
            // то событие отображается до конца календаря.
            Long finish = (dfi.getTime() - dfi.getHours() * 3600000 - dateStart.getTime()) / 86400000 * 9 + dfi.getHours() - 10;
            long countCell = ((dateFinish.getTime() - dateStart.getTime()) / 86400000 + 1) * 9-1;
            if (finish > countCell) finish = countCell;
            // размер метки для события
            Long duration = (finish - start + 1) * 101;
            //создание метки
            //EventLabel lbl = new EventLabel(event);
            Label lbl = new Label();
            lbl.setStyleName("fill");
            lbl.setSize(duration.toString() + "px", "20px");
            lbl.setText(event.getNameEvent());

            panel.add(lbl, start.intValue() * 101 + 3, (line - 2) * 20);

            //for (int i = start.intValue(); i <= finish; i++) {
            //  this.getFlexCellFormatter().addStyleName(line - 2, i, "cellfill");
            //  }
        }
    }

    public void setSchedulerPanel(AbsolutePanel panel) {
        this.panel = panel;
    }
}
